package com.webSite.demo.cy.downBook;

import java.awt.Color;
import java.awt.Font;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.filechooser.FileSystemView;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ImageUtil;
import cn.hutool.core.util.NumberUtil;

/**
 * 这个类是用来处理小说的jpg图片的
* @ClassName: ImageTest  
* @author yanfa00027  
* @date 2018年9月7日  
*
 */
public class ImageTest {
	
	private static String outPutSrc = null;
	private static final int DefaultHeight = 500;
	
	static {
		FileSystemView fsv = FileSystemView.getFileSystemView();
		File com=fsv.getHomeDirectory();    //这便是读取桌面路径的方法了
		outPutSrc = com.getPath()+"/book";
	}

	public static void main(String[] args) {
		ImageTest t = new ImageTest();
		t.cutImageOfFile("C:\\Users\\fengzihao\\Desktop\\12121");
	}
	
	/**
	 * 根据目录切割所有的图片
	* @Title: cutImageOfFile  
	* @param @param path    参数  
	* @return void    返回类型  
	* @throws
	 */
	public void cutImageOfFile(String path) {
		File file = new File(path);
		for (File f:file.listFiles()) {
			if(f.getName().endsWith(".jpg")) {
				imageCut(f,f.getName().replace(".jpg", ""),false);
			}
		}
	}
	
	/**
	 * 默认是黑体微软雅黑的图片
	* @Title: createBookTitleImage  
	* @param @param imgPath    参数  
	* @return void    返回类型  
	* @throws
	 */
	public void createBookTitleImage(String imgPath,String title) {
		File f = new File(imgPath);
		ImageOutputStream ios = null;
		try {
			ios = ImageIO.createImageOutputStream(f);
		} catch (IOException e) {
			e.printStackTrace();
		}
		ImageUtil.createImage(title, new Font("微软雅黑",1,20), Color.white, Color.black, ios);
	}
	
	
	/**
	 * 默认图片切割
	* @Title: ImageCut  
	* @param @param srcFolder
	* @param @param title    参数  
	* @return void    返回类型  
	* @throws
	 */
	public void imageCut(File srcFolder,String title) {
		imageCut(srcFolder,title,true);
	}
	
	/**
	 * 图片切割
	 * 	true代表按照一张图片一个文件夹的形式，
	* 	false则代表全部放在一个文件夹里面并且有生成的图片title
	* @Title: ImageCut  
	* @param @param srcFolder
	* @param @param flag    参数  
	* 
	* @return void    返回类型  
	* @throws
	 */
	public void imageCut(File srcFolder,String title,boolean flag) {
		BufferedImage sourceImg = null;
		try {
			sourceImg = ImageIO.read(new FileInputStream(srcFolder));
		} catch (Exception e) {
			e.printStackTrace();
			System.out.println("文件获取失败");
		}
		if(flag) {
			String newFiler = srcFolder.getAbsolutePath().replace(".jpg", "");
			//创建文件夹
			FileUtil.mkdir(newFiler);
			//总共可以截取几次
			double sum = NumberUtil.div((float)sourceImg.getHeight(), (float)DefaultHeight);
			for(int i=0;i<=sum;i++) {
				ImageUtil.cut(srcFolder, new File(newFiler+"\\"+i+".jpg"), new Rectangle(0,i*DefaultHeight,sourceImg.getWidth(),DefaultHeight));
			}
		}else {
			FileUtil.mkdir(outPutSrc);
			//总共可以截取几次
			//暂时不添加(因为可以直接读取word了)
			//createBookTitleImage(outPutSrc+"\\"+title+"(1).jpg",title);
			double sum = NumberUtil.div((float)sourceImg.getHeight(), (float)DefaultHeight);
			for(int i=0;i<=sum;i++) {
				ImageUtil.cut(srcFolder, new File(outPutSrc+"\\"+title+"("+(i+1)+").jpg"), new Rectangle(0,i*DefaultHeight,sourceImg.getWidth(),DefaultHeight));
			}
		}
		
	}
	
	/**
	 * 重命名
	* @Title: renameGifToJpg  
	* @param @param file    参数  
	* @return void    返回类型  
	* @throws
	 */
	public void renameGifToJpg(File file) {
		//把gif后缀的给替换成jpg格式的
		String absolutePath = file.getAbsolutePath().replace(".gif",".jpg");
		//重命名
		ImageUtil.convert(new File(file.getAbsolutePath()),"jpg", new File(absolutePath));
	}
	
}
